const COLORS_NAME = {
    'bright': '\x1B[1m', // 亮色
    'grey': '\x1B[2m', // 灰色
    'italic': '\x1B[3m', // 斜体
    'underline': '\x1B[4m', // 下划线
    'reverse': '\x1B[7m', // 反向
    'hidden': '\x1B[8m', // 隐藏
    'black': '\x1B[30m', // 黑色
    'red': '\x1B[31m', // 红色
    'green': '\x1B[32m', // 绿色
    'yellow': '\x1B[33m', // 黄色
    'blue': '\x1B[34m', // 蓝色
    'magenta': '\x1B[35m', // 品红
    'cyan': '\x1B[36m', // 青色
    'white': '\x1B[37m', // 白色
    'blackBG': '\x1B[40m', // 背景色为黑色
    'redBG': '\x1B[41m', // 背景色为红色
    'greenBG': '\x1B[42m', // 背景色为绿色
    'yellowBG': '\x1B[43m', // 背景色为黄色
    'blueBG': '\x1B[44m', // 背景色为蓝色
    'magentaBG': '\x1B[45m', // 背景色为品红
    'cyanBG': '\x1B[46m', // 背景色为青色
    'whiteBG': '\x1B[47m' // 背景色为白色
};

const COLORS = {
    RegExpToken: COLORS_NAME.yellow,
    NumbericLiteral: COLORS_NAME.cyan,
    CommentToken: COLORS_NAME.grey,

    DivToken: COLORS_NAME.red,
    MulToken: COLORS_NAME.red,
    PlusToken: COLORS_NAME.red
};

export function highlight(content, tokens) {
    let res = '';
    for (const t of tokens) {
        const color = COLORS[t.type];
        // 分割出每个源代码的独立元素
        const tokenText = content.substring(t.loc.start.cursor, t.loc.end.cursor);

        if (color) {
            res += `${color}${tokenText}\x1B[0m`;
        } else {
            res += tokenText;
        }
    }

    return res;
}